/**
 * @desc 文件要使用的api
 * getSher=分享接口 third=登录接口
 * @param {getSher,third}
 * 
 */
import ENV_CONFIG from '@/env.js'
import { setToken } from '@/utils/auth';
const jweixin = require('weixin-js-sdk');// 导入微信sdk
const wechat = {
	//判断是否在微信环境
	isWechat() {
		const ua = window.navigator.userAgent.toLowerCase();
		if (ua.match(/micromessenger/i) == 'micromessenger') {
			return true;
		} else {
			return false;
		}
	},
	// 微信登录
	//把code传递给后台接口，静默登录
	getOpenidAndUserinfo(code) {
		return new Promise(async (resolve, reject) => {
			const res = await third({ code })
			setToken(res.data.userinfo.token)
			resolve(res)
		})
	},
	// 获取微信code
	async getWeChatCode() {
		const local = encodeURIComponent(window.location.href); //获取当前页面地址作为回调地址
		const appid = ENV_CONFIG.env.WECHAT_MP_APPID
		//通过微信官方接口获取code之后，会重新刷新设置的回调地址【redirect_uri】
		window.location.href =
			"https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
			appid +
			"&redirect_uri=" +
			local +
			"&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
	},
	// 截取获取code
	getUrlCode(name) {
		return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [,
			''
		])[1].replace(/\+/g, '%20')) || null
	},
	// 微信登录end
	/**
	 * 微信接口鉴权
	 * @param {Object} callback 鉴权后的回调函数
	 * @param {Object} data 鉴权服务参数
	 * @param {Object} jsApiList 要鉴权的接口函数
	 */
	async initJssdk(callback, data, jsApiList) {
		// 执行获取鉴权函数信息
		// const res = await fun()
		
		jweixin.config({
			debug: data.debug,
			appId: data.appId, // 公众号的唯一标识
			timestamp: data.timestamp, // 生成签名的时间戳
			nonceStr: data.nonceStr, // 生成签名的随机串
			signature: data.signature, // 签名
			jsApiList, // 需要使用的JS接口列表
		})
		callback && callback(data)
		jweixin.checkJsApi({
			jsApiList, // 需要检测的 JS 接口列表，所有 JS 接口列表见附录2,
			success: function(res) {
				console.log(res, '是否可用')
				// 以键值对的形式返回，可用的 api 值true，不可用为false
				// 如：{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
			},
		})
	},
	
	// 微信分享
	//初始化sdk配置
	initJssdkShare(callback, url) {
		getSher().then(res => {
			console.log(res)
			if (res.code == 1) {
				info = res.data.info
				let result = res.data.config
				console.log(result)
				jweixin.config({
					debug: result.debug,
					appId: result.appId,
					timestamp: result.timestamp,
					nonceStr: result.nonceStr,
					signature: result.signature,
					jsApiList: [
						'checkJsApi',
						'onMenuShareTimeline', //旧
						'onMenuShareAppMessage', //旧
						// 'updateAppMessageShareData',
						// 'updateTimelineShareData'
					]
				});
				//配置完成后，再执行分享等功能  
				if (callback) {
					callback(result);
				}
				jweixin.checkJsApi({
					jsApiList: ['onMenuShareTimeline',
					'onMenuShareAppMessage'], // 需要检测的 JS 接口列表，所有 JS 接口列表见附录2,
					success: function(res) {
						console.log(res, '是否可用');
				 	// 以键值对的形式返回，可用的 api 值true，不可用为false
						// 如：{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
					}
				});
			}
		})
	},
	//在需要自定义分享的页面中调用  
	share(data, url) {
		url = url ? url : window.location.href;
		console.log("url:" + url)
		if (!this.isWechat()) {
			return;
		}
		//每次都需要重新初始化配置，才可以进行分享  
		this.initJssdkShare(function(signData) {
			jweixin.ready(function() {
				var shareData = {
					title: info.title,
					desc: info.desc,
					link: url,
					imgUrl: info.imgUrl,
					success: function(res) {
						// 分享后的一些操作,比如分享统计等等
					},
					cancel: function(res) {}
				};
				//分享给朋友接口  
				// jweixin.updateAppMessageShareData(shareData);
				// //分享到朋友圈接口  
				// // jweixin.updateTimelineShareData(shareData);
				jweixin.onMenuShareAppMessage(shareData); // 这2个方法是新js-sdk的方法
				jweixin.onMenuShareTimeline(shareData); // 这2个方法是新js-sdk的方法
			});
		}, url);
	},
	// 微信分享end
	
	//微信支付
	wxpay(data, callback) {
		this.isWechat() && this.initJssdk(res=> {
			const that = this;
			jweixin.ready(()=> {
				jweixin.chooseWXPay({
					timestamp: data
						.timeStamp, // 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
					nonceStr: data.nonceStr, // 支付签名随机串，不长于 32 位
					package: data.package, // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=\*\*\*）
					signType: data.signType, // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
					paySign: data.paySign, // 支付签名
					success:res=>{
						callback(res);
					},
					fail:res=> {
						console.log("%c微信H5sdk,chooseWXPay失败：",
							"color:green;background:yellow");
						callback(res);
					},
					cancel:res=> {
	
					},
				});
			});
		});
	},
	/**
	 * @param {Object} callback 微信方法执行成功要执行的函数
	 * @param {Object} data 鉴权时的服务器参数
	 */
	importWechatAddress(callback, data) {
		this.isWechat() && this.initJssdk(res => {
			const that = this;
			jweixin.ready(() => {
				jweixin.openAddress({
					success: (ress) => {
						callback(ress)
					}
				})
			})
		}, data, ['openAddress'])
	}
}
export default wechat
